﻿#pragma once

#include <QObject>
#include "systemcfg_data.h"

#define syscfg (SystemConfiguration::GetInstance())

class CfgJsonRW;

class SystemConfiguration
{
public:
	SystemConfiguration();
	~SystemConfiguration();
	static SystemConfiguration* GetInstance();
	bool Init(const QString& path);
	/*获取项目名称*/
	QString GetProjectName();
	/*机械手配置*/
	RobotSetting GetRobotSetting();
	/*视觉配置*/
	CameraSetting GetCameraSetting(const QString& camId);
	/*夹具配置*/
	QList<JigSetting> GetJigSetting();

	/*WCS及机械手服务配置*/
	WCSSetting GetWcsCfg();

	/*数据库路径*/
	QString GetSqlPath();

	/*业务线编号*/
	QStringList GetPipelineids();
	/*根据业务线编号获取业务线配置*/
	PipelineSetting GetPipelineCfgById(const QString& id);
	/*根据业务线编号获取业务线路径编号列表*/
	QStringList GetPipelinePathids(const QString& pipe);
	/*根据业务线编号获取业务线路径配置*/
	PathSetting GetPipelinePathCfgById(const QString& pipe, const QString& path);

	/*获取托盘编号列表*/
	QStringList GetStackPlateIds();
	/*根据托盘编号获取托盘配置*/
	StackPlateSetting GetStackPlateCfg(const QString& id);
	/*获取托盘垛配置*/
	PlateStackSetting GetPlateStackCfg();

	/*获取输送线位置编号列表*/
	QStringList GetBoxlineIds();
	/*根据输送线位置编号获取位置配置*/
	BoxlineSetting GetBoxlineCfg(const QString& id);

	/*获取拆垛托盘位置编号列表*/
	QStringList GetUnstackplateIds();
	/*根据托盘编号获取拆垛托盘配置*/
	UnstackPlateSetting GetUnstackPlateCfg(const QString& id);

	/*获取拆垛托盘位置编号列表*/
	QStringList GetPathIds();
	/*根据托盘编号获取拆垛托盘配置*/
	PathSetting GetPathCfgById(const QString& id);


	/*获取报警灯配置*/
	AlarmSetting GetAlarmLightSetting();
	/*获取安全锁配置*/
	SafeLockSetting GetSafeLockerSetting();
	/*获取报警灯配置*/
	SafedoorSetting GetSafeDoorSetting();
	/*获取光栅配置*/
	QList<GratingSetting> GetGratingSetting();

private:
	CfgJsonRW* m_cfg = nullptr;
};
